import com.pobos.Codificador;
import com.pobos.model.*
import com.google.appengine.api.datastore.*
import static com.google.appengine.api.datastore.FetchOptions.Builder.*


def usuario = params.usuario
def contrasinal = params.contrasinal
String correo = params.correo
String nomeCompleto = params.nomeCompleto

if (usuario && contrasinal && correo && nomeCompleto) {
	//xera una palabra de rexistro
	
	Util util = new Util()
	String activacion = util.xeraCadeaAleatoria(32)
	
	try {
		
		if (!usuarioExistente(usuario)) {
			//Codifica o contrasinal
			String contrasinalCodificado = Codificador.codifica(contrasinal)
			
			//crea o usuario na db
			gardaUsuarioPerfil(usuario, contrasinalCodificado, correo, activacion, nomeCompleto)
			
			//envia un email de confirmacion
			enviaCorreo(correo,activacion, nomeCompleto)
			
			request.mensaxe="Usuario $usuario creado."
			request.contido="Recibirás un correo dirixido a ${correo} para activar o teu usuario."	
			forward '/exito.gtpl'	
		} else {
			request.erro = "O usuario $usuario xa existe!"
			forward '/rexistro.gtpl'				
		}
		
	} catch (Exception e) {
		request.erro = "Produciuse un erro inesperado!"
		forward "/erro.gtpl"	
	}
	
	
} else {
	request.erro = "Faltan datos para o rexistro!"
	forward "/erro.gtpl"	
}

def enviaCorreo(String correo, def activacion, String nomeCompleto) {
	
	
	mail.send sender: "info.ospobos@gmail.com",
	to: correo,
	subject: "Confirmación de rexistro",
	textBody: """
		Hola ${nomeCompleto},
		
		Tes que activar a túa conta na seguinte ligazón:
		
		http://ospobos.appspot.com/activa/$activacion
		
		Saúdos
		"""
	
}

def gardaUsuarioPerfil(def nome, def contrasinal, def correo, def activacion, def nomeCompleto) {
	
	Usuario usuario = new Usuario([nome:nome,
	                               contrasinal:contrasinal,
	                               correo:correo,
	                               nomeCompleto:nomeCompleto,
	                               activacion:activacion,
	                               dataRexistro:new Date(),
	                               activo:false])
	
	Entity perfil = new Entity("Perfil")
	perfil.nome = nomeCompleto
	perfil.usuario = nome
	perfil.numeroItems = 0
	perfil.save()
	
	usuario.perfil = perfil.key.id	
	usuario.save()
	
}

boolean usuarioExistente(String nomeUsuario) {
	
	def usuarioExistente = Usuario.findByNome(nomeUsuario)
	
	if (usuarioExistente) {
		return true
	} else {
		return false
	}
	
}